package modeles;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import modeles.DBManager;


public class Produit {
	int produit_id;
	String codeProd;
	String produit_libelle;
	int categ_id;
	String categ_libelle;
	int prix;
	
	public Produit(){
		this.codeProd = "";
		this.produit_libelle ="";
		this.categ_libelle = "";
		this.prix = 0;
	}
	public Produit(int produit_id, String codeProd, String produit_libelle,
			int categ_id, String categ_libelle, int prix) {
		super();
		this.produit_id = produit_id;
		this.codeProd = codeProd;
		this.produit_libelle = produit_libelle;
		this.categ_id = categ_id;
		this.categ_libelle = categ_libelle;
		this.prix = prix;
	}
	
	public Produit( String codeProd, String produit_libelle, int categ_id,  int prix) {
		super();
		this.codeProd = codeProd;
		this.produit_libelle = produit_libelle;
		this.categ_id = categ_id;
		this.prix = prix;
	}
	
	public int getProduit_id() {
		return produit_id;
	}
	public void setProduit_id(int produit_id) {
		this.produit_id = produit_id;
	}
	public String getCodeProd() {
		return codeProd;
	}
	public void setCodeProd(String codeProd) {
		this.codeProd = codeProd;
	}
	public String getProduit_libelle() {
		return produit_libelle;
	}
	public void setProduit_libelle(String produit_libelle) {
		this.produit_libelle = produit_libelle;
	}
	public int getCateg_id() {
		return categ_id;
	}
	public void setCateg_id(int categ_id) {
		this.categ_id = categ_id;
	}
	public String getCateg_libelle() {
		return categ_libelle;
	}
	public void setCateg_libelle(String categ_libelle) {
		this.categ_libelle = categ_libelle;
	}
	public int getPrix() {
		return prix;
	}
	public void setPrix(int prix) {
		this.prix = prix;
	}
	
	 public String NVLSqlStr(String objet){
	    	String result = "";
	    	result = "'"+objet+"'";
	    	return result;
	    }
	 
	 public Vector<Categorie> getListCategory(DBManager _dbManager){
	    	Vector<Categorie> vectRes = new Vector<Categorie>();
	    	String zQueryCategory = "SELECT * FROM \"CATEGORIE\" order by categ_libelle ASC";
	    	
			try
			{
				Statement oStmtCategory = (Statement) _dbManager.oStockDbCnx.createStatement () ;	
				ResultSet oRsCategory = (ResultSet) oStmtCategory.executeQuery (zQueryCategory) ;
				while (oRsCategory.next ())
				{
					Categorie categorie = new Categorie();
					
					categorie.setCategorie_id(oRsCategory.getInt("categ_id"));
					categorie.setLibelle(oRsCategory.getString("categ_libelle"));
					vectRes.add(categorie);
					
				}
			}
			catch (SQLException _e)
			{
				System.out.println ("Erreur interne pendant la requete !") ;
				_e.printStackTrace () ;
			}
	    	return vectRes;
	    }
	    
	    public int getMaxtypeProdId (DBManager _dbManager)
		{
			int iMaxId = 0 ;
			boolean bIsCalled = true ;
			String zQuery = "SELECT LAST_VALUE, IS_CALLED FROM SEQ_ID_PRODUIT" ;
			try
			{
				Statement oStmt = _dbManager.oStockDbCnx.createStatement () ;	
				ResultSet oRs = oStmt.executeQuery (zQuery) ;
				if (oRs.next ())
				{
					iMaxId = oRs.getInt ("LAST_VALUE") ;
					bIsCalled = oRs.getBoolean ("IS_CALLED") ;
					if (bIsCalled)//si deja utilisie dans la base de donnees
					{
						iMaxId++ ;
					}
				}
			}
			catch (SQLException _e)
			{
				System.out.println ("Erreur interne pendant la requÃªte !") ;
				_e.printStackTrace () ;
			}
			return iMaxId ;
		}
	
	 //enregistrment d'un produit
  	public boolean storeProduct (DBManager _dbManager)
  	{
  		boolean bRes = true;
  		String zQuery = "INSERT INTO \"PRODUIT\" (produit_id,produit_code,produit_libelle,categ_id,prix_vente) VALUES (nextval('seq_id_produit'), " ;
  		zQuery +=  NVLSqlStr(this.getCodeProd()) + ", " ;
  		zQuery +=  NVLSqlStr(this.getProduit_libelle()) + ", " ;
  		zQuery += this.getCateg_id() + ", " ;
  		zQuery += this.getPrix() + ") " ;
  		
  		try
  		{
  			Statement oStmt = _dbManager.oStockDbCnx.createStatement () ;	
  			oStmt.executeUpdate (zQuery) ;
  		}
  		catch (SQLException _e)
  		{
  			System.out.println ("Erreur interne pendant la mise Ã  jour !") ;
  			bRes = false;
  			_e.printStackTrace () ;
  		}

  		return bRes;
  		
  	}
  	
	
  	public Vector<Produit> getListProduct(DBManager _dbManager){
  		Vector<Produit> listProduit = new Vector<Produit>();
    	String zQueryProduit = "SELECT * FROM \"PRODUIT\" order by produit_libelle ASC";
  		//String zQueryProduit = "SELECT  FROM \"PRODUIT\" order by produit_libelle ASC";
  		
		try
		{
			Statement oStmtProduit = (Statement) _dbManager.oStockDbCnx.createStatement () ;	
			ResultSet oRsProduit = (ResultSet) oStmtProduit.executeQuery (zQueryProduit) ;
			while (oRsProduit.next ())
			{
				Produit oProduit = new Produit();
				
				oProduit.setProduit_id(oRsProduit.getInt("produit_id"));
				oProduit.setCodeProd(oRsProduit.getString("produit_code"));
				oProduit.setProduit_libelle(oRsProduit.getString("produit_libelle"));
				oProduit.setCateg_id(oRsProduit.getInt("categ_id"));
				oProduit.setPrix(oRsProduit.getInt("prix_vente"));
				listProduit.add(oProduit);
				
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requete !") ;
			_e.printStackTrace () ;
		}
  		return listProduit;
  	}
  	
  	public Vector<Produit> getListProductByCateg( DBManager _dbManager){
  		Vector<Produit> listProduit = new Vector<Produit>();
    	String zQueryProduit = "SELECT produit_id,produit_code, produit_libelle,\"PRODUIT\".categ_id,categ_libelle,prix_vente" +
    			" FROM \"PRODUIT\",\"CATEGORIE\" where \"CATEGORIE\".categ_id = \"PRODUIT\".categ_id order by produit_libelle ASC";
    	
		try
		{
			Statement oStmtProduit = (Statement) _dbManager.oStockDbCnx.createStatement () ;	
			ResultSet oRsProduit = (ResultSet) oStmtProduit.executeQuery (zQueryProduit) ;
			while (oRsProduit.next ())
			{
				Produit oProduit = new Produit();
				
				oProduit.setProduit_id(oRsProduit.getInt("produit_id"));
				oProduit.setCodeProd(oRsProduit.getString("produit_code"));
				oProduit.setProduit_libelle(oRsProduit.getString("produit_libelle"));
				oProduit.setCateg_id(oRsProduit.getInt("categ_id"));
				oProduit.setCateg_libelle(oRsProduit.getString("categ_libelle"));
				oProduit.setPrix(oRsProduit.getInt("prix_vente"));
				
				listProduit.add(oProduit);
				
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requete !") ;
			_e.printStackTrace () ;
		}
  		return listProduit;
  	}
  	
  	public Produit findProductByCode(DBManager _dbManager){
  		Produit oProduitRes = null;
  		String zQueryProduct = "SELECT produit_id,produit_code,produit_libelle, \"PRODUIT\".categ_id as categ,categ_libelle " +
  				" FROM \"PRODUIT\" ,\"CATEGORIE\" where \"PRODUIT\".categ_id = \"CATEGORIE\".categ_id and produit_code = '"+this.codeProd+"'";
    	
		try
		{
			Statement oStmtProduct = (Statement) _dbManager.oStockDbCnx.createStatement () ;	
			ResultSet oRsProduct = (ResultSet) oStmtProduct.executeQuery (zQueryProduct) ;
			if (oRsProduct.next ())
			{
				oProduitRes = new Produit();
				oProduitRes.setProduit_id(oRsProduct.getInt("produit_id"));
				oProduitRes.setCodeProd(oRsProduct.getString("produit_code"));
				oProduitRes.setProduit_libelle(oRsProduct.getString("produit_libelle"));
				oProduitRes.setCateg_id(oRsProduct.getInt("categ"));
				oProduitRes.setCateg_libelle(oRsProduct.getString("categ_libelle"));
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requete !") ;
			_e.printStackTrace () ;
		}
  		return oProduitRes;
  		
  	}
  	
  	public Produit findProductById(DBManager _dbManager){
  		Produit oProduitRes = null;
  		String zQueryProduct = "SELECT produit_id,produit_code,produit_libelle, \"PRODUIT\".categ_id as categ,categ_libelle " +
  				" FROM \"PRODUIT\" ,\"CATEGORIE\" where \"PRODUIT\".categ_id = \"CATEGORIE\".categ_id and produit_id = "+this.produit_id+"";
    	
		try
		{
			Statement oStmtProduct = (Statement) _dbManager.oStockDbCnx.createStatement () ;	
			ResultSet oRsProduct = (ResultSet) oStmtProduct.executeQuery (zQueryProduct) ;
			if (oRsProduct.next ())
			{
				oProduitRes = new Produit();
				oProduitRes.setProduit_id(oRsProduct.getInt("produit_id"));
				oProduitRes.setCodeProd(oRsProduct.getString("produit_code"));
				oProduitRes.setProduit_libelle(oRsProduct.getString("produit_libelle"));
				oProduitRes.setCateg_id(oRsProduct.getInt("categ"));
				oProduitRes.setCateg_libelle(oRsProduct.getString("categ_libelle"));
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requete !") ;
			_e.printStackTrace () ;
		}
  		return oProduitRes;
  		
  	}
}
